package goldeneagle.com.user.dao;

import goldeneagle.com.entity.User;
import goldeneagle.com.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;

/*
 *Created by GHW
 *Description:实现类，实现UserDao接口
 *2019/11/12 16:25
 */
public class UserDaoImpl implements UserDao {
    @Override
    //用户注册
    public User UserRegister(User user) {
        Transaction tx = null;
        try(Session session = HibernateUtil.getCurrentSession()){
            tx = session.beginTransaction();
            //调用set方法设值
            user.setUsername(user.getUsername());
            user.setPassword(user.getPassword());
            user.setAddress(user.getAddress());
            user.setEmail(user.getEmail());
            user.setUserType("user");
            user.setImg("default.png");
            //调用save方法保存
            session.save(user);
            //提交
            tx.commit();
            return user;
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return null;
    }

    @Override
    //通过用户名查找用户
    public User FindUserByUsername(String username) {
        Transaction tx = null;
        /*增强型try catch
        Java7新增了自动关闭资源的try语句：
        它允许在try关键字后紧跟一对圆括号，圆括号可以声明、初始化一个或多个资源，
        此处的资源指的是那些必须在程序结束时显式关闭的资源（比如数据库连接、网络连接等），
        try语句会在该语句结束时自动关闭这些资源。*/
        User user;
        try (Session session = HibernateUtil.getCurrentSession() ) {
            tx = session.beginTransaction();
            //要实现登陆，先查询数据库有没有这个人
            //使用HQL
            Query query = session.createQuery("from User where username=?");
            //将用户输入的用户名装入
            //第一个参数是问号的位置，从0开始
            query.setParameter(0, username);
            //调用方法得到结果
            //query.uniqueResult返回单一结果
            user = (User) query.uniqueResult();
            //提交
            tx.commit();
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            if (tx != null) {
                tx.rollback();
            }
            return null;
        }
        //返回user
    }

    @Override
    //修改用户个人信息
    public User UpdateUserInfo(User user) {
        Transaction tx = null;
        try (Session session = HibernateUtil.getCurrentSession()) {
            tx = session.beginTransaction();

            //调用session的load方法，延迟查询，当对象里有值的时候才发送sql语句进行查询
            User u = session.load(User.class,user.getId());
            u.setUsername(user.getUsername());
            u.setPassword(user.getPassword());
            u.setAddress(user.getAddress());
            u.setEmail(user.getEmail());
            u.setImg(user.getImg());
            u.setUserType(user.getUserType());

            session.update(u);

            tx.commit();
            return u;
        } catch (Exception e) {
            e.printStackTrace();
            if (tx != null) {
                tx.rollback();
            }
            return null;
        }
    }
}
